def f1():
    print('这是一个无参无返回的函数')


def f2(x):
    print(f"这是一个有参无返回的函数,形参为{x}")


def f3(x):
    print('这是一个有参有返回的函数')
    return "hello world!"


def f4(x):
    print("这是一个有参有返回的函数")
    return x ** 2


def com_two_num(x: int, y: int):
    return x + y, x - y, x * y, x / y


# f1()
#
# f2(2)
#
# print(f3(4))
#
# print(f4(5))

##函数可以有多个返回值，  多个返回值通过，连接
# print(com_two_num(10, 10))  # (20, 0, 100, 1.0)


##缺省参数(不给参数传值时，有默认值）
def f(x, k=0, b=0):
    return k * x + b


# print(f(2, k=2, b=6))


# 缺省参数必须放到非缺省参数后面
def f(x, y, z, a=0):
    return x + y + z + a


# print(f(1, 2, 3, a=1))


##不定长参数：
# 1.接收0个或多个普通参数
def f1(*args):
    print('该函数演示接收不定长函数')
    print(args)
    print(*args)
    print("-" * 10)


# f1(2, 3)

def f(**kwargs):
    print(kwargs)


# 调用函数
# 传递一个参数
# f(name='zs', age='18')


###3.混合必须参数和关键字参数
def f(*args, **kwargs):
    print('接收多种类型的参数函数（可以接受必须参数，关键字参数，也可以两者都接收）')
    print(f'必须参数{args}')
    print(f'关键字参数{kwargs}')


# 调用函数
f(1, 2, 3)
print('======================')
f(name='zs', age=19)

print('======================')
# 两者都传
f(1, 2, 3, name='zs', age=19)
